博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言实现http共享(带客户访问trace)
阅读量:7145 次
发布时间:2019-06-29

本文共 2272 字,大约阅读时间需要 7 分钟。

我之前有篇文章()中提到过用Go语言实现http文件共享,这个版本的程序比python的实现快了点,默认情况下支持的客户端多了些,但是没有客户访问的trace,程序运行过程中,感觉像是死掉了。我想改进下,让它有trace

代码如下: 

/*File      : httpShareWithTrace.goAuthor    : MikeE-Mail    : Mike_Zhang@live.com*/package mainimport(    "fmt"    "net/http"    "io/ioutil"    "log"    "time"    "os"    "strings")func getFilelist(path string) string {
m_files,err := ioutil.ReadDir(path) if err !=nil{
// println( "Get filelist error !" ) return"" } var strRet string for _,f := range m_files {
// println(f.Name(),f.IsDir()) if path == "./" {
strRet += "

" + f.Name() + "

" }else{
strRet += "

" + f.Name() + "

" } } return strRet}func Handler( w http.ResponseWriter,r *http.Request ){
println("Request ",r.URL.Path," from ",r.RemoteAddr) // path := r.URL.Path[1:] path := "." + r.URL.Path if path == "./favicon.ico" {http.NotFound(w,r);return} if path == "./" || getFilelist(path) != "" {fmt.Fprintf( w,"%s",getFilelist(path));return} fin,err := os.Open(path) defer fin.Close() if err != nil {fmt.Fprintf( w,"404 : Not found" );return} readLen := 1024 * 1024 buf := make([]byte,readLen) startPos := 0 println("Transfer file ",path," ... ") for {
n,err := fin.ReadAt(buf,int64(startPos)) fmt.Fprintf(w,"%s",buf[:n]) if 0 == n || err != nil {
break} startPos += readLen }}func main(){
port := "8080"//Default port if len(os.Args)>1 { port = strings.Join(os.Args[1:2],"")} http.HandleFunc( "/",Handler) s := &http.Server{
Addr: ":"+port, ReadTimeout: 1 * time.Hour, WriteTimeout: 1 * time.Hour, MaxHeaderBytes: (1 << 31) - 1 , //Max file size is 2048M } println("Listening on port ",port,"...") log.Fatal(s.ListenAndServe())}

运行效果如下:

1、启动http文件共享

2web访问

3、后台trace

说明:最大支持2G文件的下载,限时为1个小时,这里没有用充分使用http协议,直接用文件io做的。时间有限,这里暂时达到了预期功能,够局域网使用,这个等以后有时间了做进一步的优化。

转载地址:http://lwwgl.baihongyu.com/

你可能感兴趣的文章
分区视图(转载)
查看>>
高性能MySql进化论(一):数据类型的优化_上
查看>>
算法起步之Kruskal算法
查看>>
昨天帮同学的学校写了首校歌
查看>>
Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)
查看>>
malloc、calloc、realloc三者的差别
查看>>
百度没出新算法之前这样的最好的的优化方案
查看>>
free 一个指针时【 retval = HeapFree(_crtheap, 0, pBlock);】报错的原因
查看>>
网易微专业大数据工程师
查看>>
查看、修改oracle字符集,查看oracle版本
查看>>
JavaScript引用类型之Array数组的栈方法与队列方法
查看>>
ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
查看>>
路由器实操 能够登陆QQ 收发信息正常 但游览器无法连接网页
查看>>
vi实战记录
查看>>
less初探
查看>>
关于SQL中的Update语句
查看>>
五、excel末尾补0和开头补0
查看>>
jquery中使用event.target的几点
查看>>
Hybird-App离线缓存系统
查看>>
探索两种优雅的表单验证——策略设计模式和ES6的Proxy代理模式
查看>>